package cn.edu.buaa.txtReader;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import util.Global;
import util.PageDao;
import util.TxtDao;
import cn.edu.buaa.txtReader.view.MyView;

public class DetailActivity extends AppCompatActivity {
    /*
    在该类中接收传过来的参数，并进行IO读取，将读取的内容加入到TextView中进行显示
    */
    private String fullPath;
    private TextView title;
    private TextView foot;
    private MyView myView;

    //文本表用
    private Map<String,Object> txtMap;
    //页面表用
    private Map<String,Object> pageMap=new HashMap<String,Object>();
    //用来存放每页的数据
    private StringBuffer sb=new StringBuffer();
    //读取的行数
    private int lineCount=0;
    //读取的页数
    private int pageNum=1;
    private int nowPage=1;
    //声明一个线程类
    private Handler handler;

    public Map<String,Object> getTxtMap(){
        return txtMap;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getNowPage() {
        return nowPage;
    }

    public void setNowPage(int nowPage) {
        this.nowPage = nowPage;
    }

    public Handler getHandler() {
        return handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Global.init(this);
        setContentView(R.layout.activity_detail);
        fullPath=getIntent().getStringExtra("fullPath");
        title=(TextView)findViewById(R.id.title);
        foot=(TextView)findViewById(R.id.foot);
        myView=(MyView)findViewById(R.id.content);

        handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what==0){
                    foot.setText("正在处理分页，已处理"+(pageNum-1)+"页");
                }else if (msg.what==1){
                    foot.setText("已完成分页处理:"+nowPage+"/"+pageNum);
                }
            }
        };
        //对txt表进行插入操作
        TxtDao.insertData(fullPath);
        //根据fullPath取得txt表中的字段值
        txtMap= TxtDao.getDataByFullPath(fullPath);

        if (txtMap.get("overFlag")==0){
            //如果上一次对该文件的操作，出现了：在分页没有完成的情况下退出，会产生垃圾数据，的情况，需要进行清除
            PageDao.deleteDataByTxtId((Integer) txtMap.get("id"));
            new Thread(){
                @Override
                public void run() {
                    try {
                        BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File(fullPath)),"GBK"));
                        String line=null;
                        while ((line=br.readLine())!=null) {
                            while (line.length() > Global.LINE_CHAR_COUNT) {
                                String lineData = line.substring(0, Global.LINE_CHAR_COUNT);
                                line = line.substring(Global.LINE_CHAR_COUNT);
                                loadData(lineData);
                                handler.sendEmptyMessage(0);
                            }
                            //把剩下未读的不足一行的部分算作一行进行处理
                            loadData(line);
                        }
                        br.close();
                        handler.sendEmptyMessage(1);
                        //将分页标志位设为1，表示分页完成
                        TxtDao.updataTxtOverFlag(fullPath);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }else{
            //如果当前不是第一次进入该应用，则直接访问上一次退出时的页数
            pageNum=PageDao.getPageCount((int)txtMap.get("id"));
            nowPage=(int)txtMap.get("nowPage");
            myView.changePage();
        }

    }


    @Override
    protected void onDestroy() {
        //页面退出之前将当前页标志位寸入txt表中
        TxtDao.updateTxtByNowPage(nowPage,fullPath);
        super.onDestroy();
    }

    public void loadData(String lineData){
        sb.append(lineData);
        sb.append(Global.LINE_OVER_FLAG);
        lineCount++;
        if (lineCount==Global.LINE_COUNT){
            pageMap.put("txtId",txtMap.get("id"));
            pageMap.put("content",sb.toString());
            pageMap.put("pageNum",pageNum++);
            PageDao.insertData(pageMap);

            //如果已处理了10页，那么显示内容
            if(pageNum==10) {
                myView.changePage();
            }
            sb=new StringBuffer();
            lineCount=0;

        }
    }
}
